import java.util.GregorianCalendar;
import java.util.ArrayList;;

/**
 * Classe representativa de um contato
 * @author emerson borges - emerson.borges@ccc.ufcg.edu.br
 * @author rafael lima    - rafael_ufcg10@gmail.com
 */
public class Contato extends Pessoa{
	
	private ArrayList<Endereco> endereco;
	private GregorianCalendar aniversario;
	private ArrayList<FormasContato> formasContato;
	
	/**
	 * Construtor default de um contato
	 */
	public Contato() {
		super("");		
		this.endereco = null;
		this.aniversario = null;
		this.formasContato = null;
	}
	
	/**
	 * Construtor de um contato
	 * @param nome - nome do contato
	 * @param endereco - endereco do contato
	 * @param aniversario - data de aniversario do contato
	 * @param formasContato - forma de contato do contato
	 */
	public Contato(String nome, ArrayList<Endereco> endereco, GregorianCalendar aniversario, ArrayList<FormasContato> formasContato) {
		
		super(nome);
		
		this.endereco = endereco;
		this.aniversario = aniversario;
		this.formasContato = formasContato;
		
	}

	/**
	 * Metodo para recuperar o endereco de um contato
	 * @return endereco
	 */
	public ArrayList<Endereco> getEndereco() {
		return endereco;
	}

	/**
	 * Metodo para modificar o endereco de um contato
	 * @param endereco
	 */
	public void setEndereco(ArrayList<Endereco> endereco) {
		this.endereco = endereco;
	}

	/**
	 * Metodo para acessar a data de aniversario de um contato
	 * @return aniversario
	 */
	public GregorianCalendar getAniversario() {
		return aniversario;
	}

	/**
	 * Metodo para modificar a data de aniversario de um contato
	 * @param aniversario
	 */
	public void setAniversario(GregorianCalendar aniversario) {
		this.aniversario = aniversario;
	}

	/**
	 * Metodo para acessar as formas de contato de um contato
	 * @return formasContato
	 */
	public ArrayList<FormasContato> getFormasContato() {
		return formasContato;
	}

	/**
	 * Metodo para modificar as formas de contato de um contato
	 * @param formasContato
	 */
	public void setFormasContato(ArrayList<FormasContato> formasContato) {
		this.formasContato = formasContato;
	}
	
	/**
	 * Mostra os dados do contato como uma string
	 */
	public String toString(){
		return String.format("Nome: %s\n Endereco: %s\n Aniversario: %s\n Formas de Contato: %s", super.toString(), getEndereco(), getAniversario(), getFormasContato());
	}
	
	
	/**
	 * Verifica se dois contatos sao iguais
	 */
	public boolean equals(Object obj){
		if(!(obj instanceof Pessoa)){
			return false;
		}
		Pessoa outra = (Pessoa) obj;
		return getNome().equals(outra.getNome());

	}

}